// #include <stdio.h>
// #include <stdlib.h>

// int main()
// {
//     int n ;
//     int arr[40] = {0};
//     int i = 0;
//     scanf("%d", &n);    //要排序的总数量

//     //数组元素的输入
//     printf("排序前：");
//     for ( i = 0; i < n; i++)
//     {
//         scanf("%d",&arr[i]);
//         // printf("%d ",arr[i]);
//     }

//     for (i = 0; i < n-1; i++)     //总共的排序躺数
//     {
//         for (int j = 0; j < n-1-i; j++)  //每躺要比较的对数
//         {
//             //满足条件就进行交换
//             if (arr[j] > arr[j+1])  //意思是前一个大于后一个
//             {
//                 int tmp = arr[j];
//                 arr[j] = arr[j+1];
//                 arr[j+1] = tmp;
//             }
//         }
//     }
    
//     //输出
//     printf("排序后：");
//     for (int i = 0; i < n; i++)
//     {
//         printf("%d ",arr[i]);    
//     }
//     printf("\n");
    
// }


// #include <stdio.h>
// void main()
// {
//     int num, n, temp;//定义变量
//     int a[100];   //初始化数组
//     printf("您要重新排列多少个数:  \n");
//     scanf("%d", &num);
//     n = num;  //获取数组的长度    另外还有一种：n = sizeof(a) / sizeof(a[0]);  
//             /*a[0]是int型, 占4字节, 所以总的字节数除以4等于元素的个数*/
//     int i = 0;
//     printf("请您输入排列的数：\n");
//     while (scanf("%d", &a[i]) && num > 1)  //循环向数组中存入数，当循环
//     {
//         i++;
//         num--;
//     }
//     printf("排列之前的顺序为：");
//     for (int length = 0; length < n; length++)
//     {
//         printf("%3d", a[length]);
//     }
//     for (int j = 0; j < n - 1; j++)  //比较n-1轮
//     {
//         for (int k = 0; k < n - 1 - j; k++)  //每轮比较n-1-i次,
//         {
            
//             if (a[k] < a[k+1]) //从大到小
//             {
//                 temp = a[k];
//                 a[k] = a[k+1];
//                 a[k+1] = temp;
//             }
//             /*
//             if (a[k] > a[k + 1]) //从小到大
//             {
//                 temp = a[k];
//                 a[k] = a[k + 1];
//                 a[k + 1] = temp;
//             }
//             */
//         }
//     }
//     printf("\n");
//     printf("排列之后的顺序为：");
//     for (int len = 0; len < n; len++)
//     {
//         printf("%3d", a[len]);
//     }
//     printf("\n");
// }


#include <stdio.h>
#include <stdlib.h>

/*比较函数二*/
int compar(const void *e1, const void *e2)  //两个void*的指针，不能直接解引用
{
    //我们e1和e2指向需要排序的数组元素是整形的，所以我们把它转换成整形指针，然后再解引用
    return *(int*)e1 - *(int*)e2;   //如果想要降序，用e2-e1;
}


int main()
{
    //方法二：使用C语言提供的库函数来进行排序
    int n = 0;    //多少名学生
    scanf("%d", &n);    //第一行输入
    int arr[40] = {0};    //创建一个数组，用于存放学生成绩
    int i = 0;

    printf("排序前：");
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);    //第二行输入
    }

    //        数组开头的地址，数组中待排序的元素数量，每一元素的大小，函数指针
    qsort(arr, n , 4, compar); 

    printf("排序后: ");
    for (int len = 0; len < n; len++)
    {
        printf("%d ", arr[len]);
    }
    printf("\n");

    return 0;
}